#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h> // 定义了全局错误码 errno
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <linux/input.h>

// 输出手指滑动的轨迹

int main(int argc, char const *argv[])
{
    // 1. 打开触摸屏设备
    int tp = open("/dev/input/event0", O_RDONLY);

    // 2. 循环读取 /dev/input/event0
    struct input_event buf;
    while(1)
    {
        bzero(&buf, sizeof(buf));

        read(tp, &buf, sizeof(buf));

        // 读到了触摸屏的按压、松开数据
        if(buf.type == EV_KEY && buf.code == BTN_TOUCH)
        {
            if(buf.value == 0)
            {
                printf("松开\n");
                break;
            }

            if(buf.value > 0)
                printf("按下\n");
        }

        // 读到触摸屏的X/Y轴数据: (x, y)
        // if(buf.type == EV_ABS && buf.code == ABS_X)
        //     fprintf(stderr, "(%d, ", buf.value);

        // if(buf.type == EV_ABS && buf.code == ABS_Y)
        //     fprintf(stderr, " %d)\n", buf.value);

        // 读取完整的坐标点,每个坐标点都显示xy两个轴数据
        int x, y;
        if(buf.type == EV_ABS)
        {
            if(buf.code == ABS_X)
                x = buf.value;

            if(buf.code == ABS_Y)
                y = buf.value;
        }
        if(x && y)
            fprintf(stderr, "(%d, %d)\n", x, y);     
    }

    // 3. 释放资源
    close(tp);

    return 0;
}
